package cn.jxufe.imp;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.TextMessage;


import cn.jxufe.entity.Farm;
import cn.jxufe.entity.FarmView;
import cn.jxufe.entity.User;
import cn.jxufe.service.FarmService;
import cn.jxufe.service.FarmViewService;
import cn.jxufe.service.GameService;
import cn.jxufe.websocket.FarmActionHandler;
@Service
public class GameImp implements GameService {	
	
	@Autowired
	FarmActionHandler chatActionHandler;
	
	@Autowired
	FarmService farmService;
	
	@Autowired
	FarmViewService farmViewService;
	
	Timer timer = new Timer();
	HttpServletRequest Request;
	@Override
	public void chatStart() {
		timer.schedule(
				new TimerTask() {
						@Override
						 public void run() {
							checkCropStatus(); // 将视图的内容全部查询（即实现自动生长）
							}
						}, 0, 2000);
	}
	
	private void talkToAll(){
		chatActionHandler.sendMessageToUsers(new TextMessage("现在服务器时间是："+ new Date()));
	}
	
	
	private void checkCropStatus() {
		// 将视图的内容全部查询（即实现自动生长）
		List<FarmView> farmViews = farmViewService.list();
		if(farmViews.size() == 0) {
			// 需要处理的生长的请求
			System.out.println("后台没有正在处理的植物进程");
		}else {
			// 查询全部的农场
			for (FarmView farmView : farmViews) {
				int curStageThroughTime = farmView.getCurStageThroughTime();
				int stageTime = farmView.getStageTime();  // 当前阶段所需时间
				int curStage = farmView.getCurStage();  // 获取当前阶段 编号
				float insectProb = farmView.getInsectProb(); // 生虫概率
				// 阶段生虫
				// 一个阶段只在阶段1/3、1/2的时候判断是否生虫
//				if((curStageThroughTime == stageTime / 3 || curStageThroughTime == stageTime / 2) && farmView.getIsInsect() == 0) {
				if(farmView.getIsInsect() == 0) {
					double random = Math.random();
					if(random < insectProb) {				
						farmView.setIsInsect(1);
					}
				} 
				// 阶段自动生长
				// 标识阶段是否更新，减少数据库查找数量
				int flag = 0;
				if(curStageThroughTime + 2 > stageTime) {
					// 如果当前阶段编号小于5，那么阶段号+1操作，如果阶段等于5，那么下一阶段号为9
					if(curStage < 5) {
						farmView.setCurStage(curStage + 1);  // curStage为 种子生长 1-5
						
						// 一轮结束后，将curStageThroughTime置0
						farmView.setCurStageThroughTime(2);
						if (farmView.getIsInsect() == 1) {
							// 随机减产 1-2
							double r = Math.random();
							int n = 1;
							if(r >= 0.5) n = 2;
							int harvest = farmView.getHarvest() - n;
							if(harvest < 0) harvest = 0;
							farmView.setHarvest(harvest);
//							// 一轮结束后，将IsInsect置0
//							farmView.setIsInsect(0);							
						}else if(farmView.getIsInsect() == 2) {
							// 如果一轮结束后虫子已经被去除，那么下一轮可以继续生虫
							farmView.setInsectProb(0);
						}
						
						if(farmView.getCurStage() == 5) { // 如果下一个阶段为5，则不生虫
							farmView.setIsInsect(2);
						}
					}
					flag = 1;
				}else {
					farmView.setCurStageThroughTime(curStageThroughTime + 2);
				}

				// 前面farmView对象的值修改没有保存到数据库里面，这里才保存到数据库里面
				Farm farm = farmViewService.toFarm(farmView);
				farmService.save(farm);
				// 如果更新了阶段，所以farmView会更新，在保存farm后，应该从数据库中拿出新的farmView
				if(flag == 1) {
					farmView = farmViewService.findByLandIdAndUserId(farmView.getLandId(), farmView.getUserId());
				}
				
				String farmViewObjectStr = farmView.toTextMessage();
				chatActionHandler.sendMessageToUser(farmView.getUserName(), new TextMessage(farmViewObjectStr)); // 定时发送任务
			}
		  
		}
		
	}
}